InĀ [1]:
import requests as rq
import pandas as pd
import plotly.express as px
import numpy as np

# exibir plots no arquivo html
import plotly
plotly.offline.init_notebook_mode()
InĀ [Ā ]:
# !pip install requests
# !pip install plotly
# !pip install pandas

# !pip install openpyxl # ler excel

# !pip install matplotlib

# ValueError: Mime type rendering requires nbformat>=4.2.0 but it is not installed
# !pip install --upgrade nbformat
# !pip install nbformat 
# !pip install jupyter

MORTE DECORRENTE DE INTERVENƇƃO POLICIAL (MDIP)¶

InĀ [3]:
# https://www.ssp.sp.gov.br/estatistica/consultas
url = 'https://www.ssp.sp.gov.br/assets/estatistica/transparencia/spDados/MDIP_2024.xlsx'
dfPolice = pd.read_excel(url)
C:\Users\amtra\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\openpyxl\worksheet\_reader.py:329: UserWarning:

Data Validation extension is not supported and will be removed

InĀ [4]:
dfPolice.NATUREZA_APURADA.unique()
Out[4]:
array(['MORTE DECORRENTE DE INTERVENƇƃO POLICIAL'], dtype=object)

Serie Temporal do Num. MDIP¶

InĀ [5]:
dfPlot = dfPolice.loc[dfPolice['SITUAƇƃO']=='ServiƧo',:].groupby('ANO_BO')['ANO_BO'].count()

px.line(dfPlot,title='Num. Mortes Decorrente de Interveção Policial')

Num de MDIP de Acordo com Cor da Pele (Ao longo dos anos)¶

InĀ [6]:
dfPele = dfPolice.groupby(['ANO_BO','COR_PELE'])[['COR_PELE']].count()
dfPele.columns=['NUM']
dfPele = dfPele.reset_index()
dfPele.COR_PELE = dfPele.COR_PELE.apply(lambda x : x.lower())
                                        
px.box(dfPele, x='COR_PELE',y='NUM',title='Num de Mortes Decorrente de Intervenção Policial de Acordo com Cor da Pele')

Num de MDIP de Acordo com Idade (Ao longo dos anos)¶

InĀ [7]:
dfIdade = dfPolice.groupby(['ANO_BO','IDADE_PESSOA'])[['IDADE_PESSOA']].count()
dfIdade.columns=['NUM']
dfIdade = dfIdade.reset_index()

px.box(dfIdade, x='IDADE_PESSOA',y='NUM',title='Num de Mortes Decorrente de Intervenção Policial de Acordo com Idade (Variação Anual - Boxplot)')

Num de MDIP de Acordo com Sexo¶

InĀ [8]:
nameCol = 'SEXO_PESSOA'
dfPlot = dfPolice.groupby(['ANO_BO',nameCol])[[nameCol]].count()
dfPlot.columns=['NUM']
dfPlot = dfPlot.reset_index()
dfPlot.loc[:,nameCol] = dfPlot.loc[:,nameCol].apply(lambda x : x.lower())
px.box(dfPlot, x=nameCol,y='NUM',title='Num de Mortes Decorrente de Intervenção Policial de Acordo '+nameCol.replace('_',' ').title()+' (Variação Anual - Boxplot)')
InĀ [9]:
listCol = ['LATITUDE','LONGITUDE','COR_PELE','MUNICIPIO_CIRCUNSCRICAO']
dfPlot = dfPolice.copy()
dfPlot.LONGITUDE = dfPlot.LONGITUDE.apply(lambda x : np.nan if type(x) == type('asd') else x)
dfPlot.LATITUDE = dfPlot.LATITUDE.apply(lambda x : np.nan if type(x) == type('asd') else x)
dfPlot = dfPlot.dropna(subset=['LATITUDE','LONGITUDE','COR_PELE'])

mask1 = dfPlot.LATITUDE !=0
mask2 = dfPlot.LONGITUDE !=0

mask = mask1 & mask2

dfPlot = dfPlot.loc[mask,listCol]
dfPlot = dfPlot.reset_index(drop=True)
InĀ [10]:
dfPlot.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6509 entries, 0 to 6508
Data columns (total 4 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   LATITUDE                 6509 non-null   float64
 1   LONGITUDE                6509 non-null   float64
 2   COR_PELE                 6509 non-null   object 
 3   MUNICIPIO_CIRCUNSCRICAO  6509 non-null   object 
dtypes: float64(2), object(2)
memory usage: 203.5+ KB
InĀ [11]:
dfPlot.shape
Out[11]:
(6509, 4)

Mapa de MDIP¶

InĀ [12]:
# scatter_map possui limitação de tamanho do dataframe até 6000 funcionou jÔ 6500 não
fig = px.scatter_map(dfPlot.iloc[0:6000,:], lat="LATITUDE", lon="LONGITUDE", 
                     color = 'COR_PELE',
                     hover_name="MUNICIPIO_CIRCUNSCRICAO", hover_data=["COR_PELE"] , zoom=10, height=300)
fig.update_layout(map_style="open-street-map")
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()
InĀ [13]:
# =============================================================================
# 
# 
# https://www.ssp.sp.gov.br/assets/estatistica/transparencia/baseDados/celularesSub/CelularesSubtraidos_2024.xlsx
# 
# 
# https://www.ssp.sp.gov.br/assets/estatistica/transparencia/baseDados/veiculosSub/VeiculosSubtraidos_2024.xlsx
# 
# 
# https://www.ssp.sp.gov.br/assets/estatistica/transparencia/spDados/SPDadosCriminais_2024.xlsx
# 
# 
# https://www.ssp.sp.gov.br/assets/estatistica/transparencia/spDados/DadosProdutividade_2024.xlsx
# 
# 
# =============================================================================